home *** CD-ROM | disk | FTP | other *** search
/ The CICA Windows Explosion! / The CICA Windows Explosion! - Disc 2.iso / programr / ole2book.zip / CHAP10.ZIP / CHAP10 / SCHMOO / SCHMOOLE.H < prev   
C/C++ Source or Header  |  1993-06-13  |  8KB  |  226 lines

  1. /*
  2.  * SCHMOOLE.H
  3.  * Chapter 10 Modification
  4.  *
  5.  * Include file containing all compound document related definitions.
  6.  *
  7.  * Copyright (c)1993 Microsoft Corporation, All Rights Reserved
  8.  *
  9.  * Kraig Brockschmidt, Software Design Engineer
  10.  * Microsoft Systems Developer Relations
  11.  *
  12.  * Internet  :  kraigb@microsoft.com
  13.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  14.  */
  15.  
  16.  
  17. #ifndef _SCHMOOLE_H_
  18. #define _SCHMOOLE_H_
  19.  
  20.  
  21. //These are global for simplification of object implementation.
  22. extern ULONG g_cObj;
  23. extern ULONG g_cLock;
  24. extern HWND  g_hWnd;
  25.  
  26. //Type for an object-destroyed callback
  27. typedef void (FAR PASCAL *LPFNDESTROYED)(void);
  28.  
  29. //Function for the object to notify on destruction.
  30. void FAR PASCAL ObjectDestroyed(void);
  31.  
  32.  
  33. //ICLASSF.CPP
  34. class __far CFigureClassFactory : public IClassFactory
  35.     {
  36.     protected:
  37.         ULONG           m_cRef;         //Reference count on class object
  38.         LPCSchmooFrame  m_pFR;          //For document creation.
  39.         BOOL            m_fCreated;     //Have we created one object yet?
  40.  
  41.     public:
  42.         CFigureClassFactory(LPCSchmooFrame);
  43.         ~CFigureClassFactory(void);
  44.  
  45.         //IUnknown members
  46.         STDMETHODIMP         QueryInterface(REFIID, LPVOID FAR *);
  47.         STDMETHODIMP_(ULONG) AddRef(void);
  48.         STDMETHODIMP_(ULONG) Release(void);
  49.  
  50.         //IClassFactory members
  51.         STDMETHODIMP         CreateInstance(LPUNKNOWN, REFIID, LPVOID FAR *);
  52.         STDMETHODIMP         LockServer(BOOL);
  53.     };
  54.  
  55. typedef CFigureClassFactory FAR * LPCFigureClassFactory;
  56.  
  57.  
  58. //FIGURE.CPP
  59. //This is what the class factory creates
  60.  
  61. #define CFORMATETCGET   5   //Private, Embed Source, Obj Descript, MF, Bmp.
  62.  
  63. class __far CFigure : public IUnknown
  64.     {
  65.     friend class CImpIPersistStorage;
  66.     friend class CImpIDataObject;
  67.     friend class CImpIOleObject;
  68.  
  69.     protected:
  70.         ULONG               m_cRef;
  71.         LPCSchmooFrame      m_pFR;          //Frame (for UI manipulation)
  72.         LPCSchmooDoc        m_pDoc;         //What holds the real polyline
  73.         LPCPolyline         m_pPL;          //Copy of m_pDoc->m_pPL
  74.  
  75.         BOOL                m_fEmbedded;    //TRUE on IOleObject::SetHostNames
  76.  
  77.         LPFNDESTROYED       m_pfnDestroy;   //Function to call on closure.
  78.         LPPERSISTSTORAGE    m_pIPersistStorage;
  79.  
  80.         //Things for IDataObject
  81.         LPDATAOBJECT        m_pIDataObject;         //Implemented
  82.         LPDATAADVISEHOLDER  m_pIDataAdviseHolder;   //Used
  83.  
  84.         UINT                m_cf;                   //Copy of pDoc->m_cf
  85.         ULONG               m_cfeGet;
  86.         FORMATETC           m_rgfeGet[CFORMATETCGET];
  87.  
  88.         //Things for IOleObject
  89.         LPOLEOBJECT         m_pIOleObject;          //Implemented
  90.         LPOLEADVISEHOLDER   m_pIOleAdviseHolder;    //Used
  91.         LPOLECLIENTSITE     m_pIOleClientSite;      //Used
  92.  
  93.  
  94.     public:
  95.         CFigure(LPFNDESTROYED, LPCSchmooDoc);
  96.         ~CFigure(void);
  97.  
  98.         //Non-delegating IUnknown:  we don't support aggregation here.
  99.         STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
  100.         STDMETHODIMP_(ULONG) AddRef(void);
  101.         STDMETHODIMP_(ULONG) Release(void);
  102.  
  103.         BOOL FInit(void);
  104.         void FrameSet(LPCSchmooFrame);
  105.         BOOL FIsDirty(void);
  106.         BOOL FIsEmbedded(void);
  107.         void SendAdvise(UINT);
  108.     };
  109.  
  110. typedef CFigure * LPCFigure;
  111.  
  112. //Codes for CFigure::SendAdvise
  113. //......Code........................... Method called in CFigureSendAdvise...
  114. #define OBJECTCODE_SAVED          0     //IOleAdviseHolder::SendOnSave
  115. #define OBJECTCODE_CLOSED         1     //IOleAdviseHolder::SendOnClose
  116. #define OBJECTCODE_RENAMED        2     //IOleAdviseHolder::SendOnRename
  117. #define OBJECTCODE_SAVEOBJECT     3     //IOleClientSite::SaveObject
  118. #define OBJECTCODE_DATACHANGED    4     //IDataAdviseHolder::SendOnDataChange
  119. #define OBJECTCODE_SHOWWINDOW     5     //IOleClientSite::OnShowWindow(TRUE)
  120. #define OBJECTCODE_HIDEWINDOW     6     //IOleClientSite::OnShowWindow(FALSE)
  121. #define OBJECTCODE_SHOWOBJECT     7    //IOleClientSite::ShowObject
  122.  
  123.  
  124. //IPERSTOR.CPP
  125.  
  126. class __far CImpIPersistStorage : public IPersistStorage
  127.     {
  128.     protected:
  129.         ULONG               m_cRef;      //Interface reference count.
  130.         LPCFigure           m_pObj;      //The CFigure we work with.
  131.         LPUNKNOWN           m_punkOuter; //Controlling unknown for delegation.
  132.  
  133.     public:
  134.         CImpIPersistStorage(LPCFigure, LPUNKNOWN);
  135.         ~CImpIPersistStorage(void);
  136.  
  137.         STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
  138.         STDMETHODIMP_(ULONG) AddRef(void);
  139.         STDMETHODIMP_(ULONG) Release(void);
  140.  
  141.         STDMETHODIMP GetClassID(LPCLSID);
  142.  
  143.         STDMETHODIMP IsDirty(void);
  144.         STDMETHODIMP InitNew(LPSTORAGE);
  145.         STDMETHODIMP Load(LPSTORAGE);
  146.         STDMETHODIMP Save(LPSTORAGE, BOOL);
  147.         STDMETHODIMP SaveCompleted(LPSTORAGE);
  148.         STDMETHODIMP HandsOffStorage(void);
  149.     };
  150.  
  151.  
  152.  
  153. //IDATAOBJ.CPP
  154. class __far CImpIDataObject : public IDataObject
  155.     {
  156.     private:
  157.         ULONG           m_cRef;         //Interface reference count.
  158.         LPCFigure       m_pObj;         //Back pointer to the object.
  159.         LPUNKNOWN       m_punkOuter;    //Controlling unknown for delegation
  160.  
  161.     public:
  162.         CImpIDataObject(LPCFigure, LPUNKNOWN);
  163.         ~CImpIDataObject(void);
  164.  
  165.         //IUnknown members that delegate to m_punkOuter.
  166.         STDMETHODIMP         QueryInterface(REFIID, LPVOID FAR *);
  167.         STDMETHODIMP_(ULONG) AddRef(void);
  168.         STDMETHODIMP_(ULONG) Release(void);
  169.  
  170.         //IDataObject members
  171.         STDMETHODIMP GetData(LPFORMATETC, LPSTGMEDIUM);
  172.         STDMETHODIMP GetDataHere(LPFORMATETC, LPSTGMEDIUM);
  173.         STDMETHODIMP QueryGetData(LPFORMATETC);
  174.         STDMETHODIMP GetCanonicalFormatEtc(LPFORMATETC, LPFORMATETC);
  175.         STDMETHODIMP SetData(LPFORMATETC, STGMEDIUM FAR *, BOOL);
  176.         STDMETHODIMP EnumFormatEtc(DWORD, LPENUMFORMATETC FAR *);
  177.         STDMETHODIMP DAdvise(FORMATETC FAR *, DWORD,  LPADVISESINK, DWORD FAR *);
  178.         STDMETHODIMP DUnadvise(DWORD);
  179.         STDMETHODIMP EnumDAdvise(LPENUMSTATDATA FAR *);
  180.     };
  181.  
  182.  
  183. //IOLEOBJ.CPP
  184. class __far CImpIOleObject : public IOleObject
  185.     {
  186.     private:
  187.         ULONG           m_cRef;         //Interface reference count.
  188.         LPCFigure       m_pObj;         //Back pointer to the object.
  189.         LPUNKNOWN       m_punkOuter;    //Controlling unknown for delegation
  190.  
  191.     public:
  192.         CImpIOleObject(LPCFigure, LPUNKNOWN);
  193.         ~CImpIOleObject(void);
  194.  
  195.         //IUnknown members that delegate to m_punkOuter.
  196.         STDMETHODIMP         QueryInterface(REFIID, LPVOID FAR *);
  197.         STDMETHODIMP_(ULONG) AddRef(void);
  198.         STDMETHODIMP_(ULONG) Release(void);
  199.  
  200.         //IOleObject members
  201.         STDMETHODIMP SetClientSite(LPOLECLIENTSITE);
  202.         STDMETHODIMP GetClientSite(LPOLECLIENTSITE FAR *);
  203.         STDMETHODIMP SetHostNames(LPCSTR, LPCSTR);
  204.         STDMETHODIMP Close(DWORD);
  205.         STDMETHODIMP SetMoniker(DWORD, LPMONIKER);
  206.         STDMETHODIMP GetMoniker(DWORD, DWORD, LPMONIKER FAR *);
  207.         STDMETHODIMP InitFromData(LPDATAOBJECT, BOOL, DWORD);
  208.         STDMETHODIMP GetClipboardData(DWORD, LPDATAOBJECT FAR *);
  209.         STDMETHODIMP DoVerb(LONG, LPMSG, LPOLECLIENTSITE, LONG, HWND, LPCRECT);
  210.         STDMETHODIMP EnumVerbs(LPENUMOLEVERB FAR *);
  211.         STDMETHODIMP Update(void);
  212.         STDMETHODIMP IsUpToDate(void);
  213.         STDMETHODIMP GetUserClassID(CLSID FAR *);
  214.         STDMETHODIMP GetUserType(DWORD, LPSTR FAR *);
  215.         STDMETHODIMP SetExtent(DWORD, LPSIZEL);
  216.         STDMETHODIMP GetExtent(DWORD, LPSIZEL);
  217.         STDMETHODIMP Advise(LPADVISESINK, DWORD FAR *);
  218.         STDMETHODIMP Unadvise(DWORD);
  219.         STDMETHODIMP EnumAdvise(LPENUMSTATDATA FAR *);
  220.         STDMETHODIMP GetMiscStatus(DWORD, DWORD FAR *);
  221.         STDMETHODIMP SetColorScheme(LPLOGPALETTE);
  222.     };
  223.  
  224.  
  225. #endif _SCHMOOLE_H_
  226.